package com.ficus.road.maintain.core.model.common;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

/**
 * 错误码。 具体错误信息看`message`。  - TIME_OUT: 请求超时。   `TIME_OUT`不是服务端返回的错误。   定义在这里方便客户端的实现。 - INVALID_PARAMETER: 请求参数错误。 - FORBIDDEN: 无权限。   为了防止利用返回码做信息嗅探，“对象不存在”也应返回`FORBIDDEN`。 - SERVER_BUSY: 服务忙。 - UNIMPLEMENTED_OPERATION: 服务端未实现的操作。
 */
public enum ErrorCodeDTO {

    TIME_OUT("TIME_OUT"),

    INVALID_PARAMETER("INVALID_PARAMETER"),

    FORBIDDEN("FORBIDDEN"),

    SERVER_BUSY("SERVER_BUSY"),

    UNIMPLEMENTED_OPERATION("UNIMPLEMENTED_OPERATION");

    private final String value;

    ErrorCodeDTO(String value) {
        this.value = value;
    }

    @JsonCreator
    public static ErrorCodeDTO fromValue(String value) {
        for (ErrorCodeDTO b : ErrorCodeDTO.values()) {
            if (b.value.equals(value)) {
                return b;
            }
        }
        throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }

    @JsonValue
    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return String.valueOf(value);
    }
}

